package com.base.cn.platform.os.controller.manage.loreset;

import com.base.cn.platform.os.common.controller.BaseController;
import com.base.cn.platform.os.common.mybatis.Pagination;
import com.base.cn.platform.os.common.utils.StringUtils;
import com.base.cn.platform.os.common.utils.result.ResultUtil;
import com.base.cn.platform.os.entity.manage.loreset.SysLoreset;
import com.base.cn.platform.os.entity.manage.loreset.SysLoresetPoint;
import com.base.cn.platform.os.service.manage.loreset.SysLoresetBiz;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 知识体系Controller
 *
 * @author s.li
 * @create 2018-03-22 17:28
 */
@RestController
@RequestMapping("/manage")
public class SysLoresetController extends BaseController {

    @Autowired
    private SysLoresetBiz sysLoresetBiz;

    /**
     * 保存知识体系数据
     * @param loreset
     * @return
     */
    @RequestMapping("/saveLoreset")
    public Map<String,Object> saveLoreset(@RequestBody SysLoreset loreset){
        if(StringUtils.isEmpty(loreset.getLoresetName())){
            return ResultUtil.ERROR("请输入知识体系名称");
        }
        if(loreset.getLoresetName().trim().length()>30){
            return ResultUtil.ERROR("知识体系名称限制30个字以内");
        }
        if(StringUtils.isEmpty(loreset.getSubjectIds())){
            return ResultUtil.ERROR("请选择隶属专业/科目");
        }
        if(StringUtils.subHeadTailString(loreset.getSubjectIds(),",").split(",").length<2){
            return ResultUtil.ERROR("请选择隶属的科目");
        }
        loreset = sysLoresetBiz.saveLoreset(loreset);
        return ResultUtil.SUCCESS("知识体系保存成功",loreset);
    }

    /**
     * 查询分页知识体系列表
     * @param sysLoreset 查询条件
     * @param subjectData 是否获取专业数据
     * @param sysUserData 是否获取创建用户数据
     * @param pointData 是否获取知识点数据
     * @return Map<String,Object>
     */
    @RequestMapping("/findLoresetList")
    public List<SysLoreset> findLoresetList(@RequestBody SysLoreset sysLoreset,
                                            @RequestParam("subjectData") boolean subjectData,
                                            @RequestParam("sysUserData") boolean sysUserData,
                                            @RequestParam("pointData") boolean pointData) {
        return sysLoresetBiz.findLorestListBySysSubjectIds(sysLoreset.getSubjectIds(), subjectData, sysUserData, pointData);
    }

    /**
     * 查询分页知识体系列表
     * @param loreset 查询条件
     * @param currentPage 页码
     * @param subjectData 是否获取专业数据
     * @param sysUserData 是否获取创建用户数据
     * @param pointData 是否获取知识点数据
     * @return PageInfo<SysLoreset>
     */
    @RequestMapping("/findLoresetListPage")
    public PageInfo<SysLoreset> findLoresetListPage(@RequestBody(required = false) SysLoreset loreset,
                                                 int currentPage,
                                                 @RequestParam("subjectData") boolean subjectData,
                                                 @RequestParam("sysUserData") boolean sysUserData,
                                                 @RequestParam("pointData") boolean pointData){
        Pagination page = new Pagination();
        page.setCurrentPage(currentPage);
        return sysLoresetBiz.findLoresetList(page,loreset,subjectData,sysUserData,pointData);
    }

    /**
     * 获取知识体系数据
     * @param loresetId 知识体系ID
     * @param subjectData 是否获取专业数据
     * @param sysUserData 是否获取创建用户数据
     * @param pointData 是否获取知识点数据
     * @return SysLoreset
     */
    @RequestMapping("/findLoresetById")
    public SysLoreset findLoresetById(@RequestParam("lorestId") BigDecimal loresetId,
                                   @RequestParam("subjectData") boolean subjectData,
                                   @RequestParam("sysUserData") boolean sysUserData,
                                   @RequestParam("pointData") boolean pointData){
        return sysLoresetBiz.findById(loresetId,subjectData,sysUserData,pointData);
    }

    /**
     * 通过ID串
     * @param ids 知识体系ID串
     * @param subjectData 是否设置专业数据，true设置，false不设置
     * @param sysUserData 是否设置创建人数据，true设置，false不设置
     * @param pointData 是否设置知识点数据，true设置，false不设置
     * @return 知识体系map key:知识体系id value:知识体系
     */
    @RequestMapping("/findLorestListByIdsToMap")
    public Map<BigDecimal, SysLoreset> findLorestListByIdsToMap(@RequestParam("ids") String ids,
                                                     @RequestParam("subjectData") boolean subjectData,
                                                     @RequestParam("sysUserData") boolean sysUserData,
                                                     @RequestParam("pointData") boolean pointData){
        return sysLoresetBiz.findLorestListByIdsToMap(ids, subjectData, sysUserData, pointData);
    }

    /**
     * 修改知识体系状态
     * @param loresetIds 知识体系ID串
     * @param status 状态，1正常，2禁用
     * @return Map<String,Object>
     */
    @RequestMapping("/updateLoresetStatus")
    public Map<String,Object> updateLoresetStatus(@RequestParam("loresetIds") String loresetIds,
                                                  @RequestParam("status") int status){
        sysLoresetBiz.updateLoresetStatus(loresetIds,status);
        return ResultUtil.SUCCESS("知识状态修改成功");
    }

    /**
     * 获取知识体系下的知识点，且分层（用于考试）
     * @param subjectIds 专业ID串
     * @param loresetData 是否设置知识点的知识体系
     * @return List<SysLoresetPoint>
     */
    @RequestMapping("/findLayeredSysExamLoresetPointList")
    public List<SysLoresetPoint> findLayeredSysExamLoresetPointList(@RequestParam("subjectIds") String subjectIds,
                                                                @RequestParam("loresetData") boolean loresetData){
        return sysLoresetBiz.findLayeredSysExamLoresetPointList(subjectIds,loresetData);
    }

    /**
     * 删除知识体系
     * @param loresetIds 知识体系ID串
     * @return Map<String,Object>
     */
    /*@RequestMapping("/deleteLoreset")
    public Map<String,Object> deleteLoreset(@RequestParam("loresetIds") String loresetIds){
        sysLoresetBiz.deleteLoreset(loresetIds);
        return ResultUtil.SUCCESS("知识体系删除成功");
    }*/
}
